package tests;

import static org.junit.Assert.*;

import packageServer.Server;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestServer {
	
	private Server s;
	
	@Before
	public void setUp() throws Exception {
		s=new Server("casuale");
		s.creaGiocatore("User","password");
		s.creaGiocatore("dflb", "sdfv");	//come mai non si aggiunge?
	}

	@After
	public void tearDown() throws Exception {
		s=null;
	}

	@Test
	public void testServer() {
		assertNotNull(s);
	}


	@Test
	public void testRichiestaTurnoDiChi() {
		s.getUserDaToken(0).setDiturno(true);
		assertTrue(s.getUserDaToken(0).isDiturno());
		assertEquals("User", s.richiestaTurnoDiChi());
		s.getUserDaToken(0).setDiturno(false);
		assertNotSame("User", s.richiestaTurnoDiChi());
	}

	@Test
	public void testMuoviDino() {
		assertEquals("@no,TokenNonValido",s.muoviDino(3,0,1,2)); //non esiste user
		assertEquals("@no,NonEIlTuoTurno",s.muoviDino(0,0,1,2)); //non e' il suo turno
		s.getUserDaToken(0).setDiturno(true);
		assertEquals("@no,NonHaiUnaSpecieNonEstinta",s.muoviDino(0, 0, 1, 2)); //non ha una specie
		s.creaRazza(0, "prova", "c");
		s.getUserDaToken(0).getSpecieCorrente().getDino().removeAllElements();
		assertEquals("@no,IdNonValido", s.muoviDino(0, 0, 1, 2)); //non ha un dinosauro
		s.getUserDaToken(0).getSpecieCorrente().addDino(0, 1, 1);
		s.getUserDaToken(0).getSpecieCorrente().getDino(0).setEnergia(1);
		assertEquals("@no,MorteDinosauroESpecieEstinta", s.muoviDino(0, 0, 1, 2)); //Il dinosauro e' ultimo e senza abbastanza energia per muoversi
	}

	@Test
	public void testDeponiUovo() {
		assertEquals("@no,TokenNonValido",s.deponiUovo(3,0)); //non esiste user
		assertEquals("@no,NonEIlTuoTurno",s.deponiUovo(0,0)); //non e' il suo turno
		s.getUserDaToken(0).setDiturno(true);
		assertEquals("@no,NonHaiUnaSpecieNonEstinta",s.deponiUovo(0,0)); //non ha una specie
		s.creaRazza(0, "prova", "c");
		s.getUserDaToken(0).getSpecieCorrente().getDino().removeAllElements();
		assertEquals("@no,IdNonValido", s.deponiUovo(0, 0)); //non ha un dinosauro
		s.getUserDaToken(0).getSpecieCorrente().addDino(0, 1, 1);
		s.getUserDaToken(0).getSpecieCorrente().getDino(0).setEnergia(1499);
		assertEquals("@no,MorteDinosauroESpecieEstinta", s.deponiUovo(0, 0)); //Il dinosauro e' ultimo e senza abbastanza energia per deporre
		}

	@Test
	public void testCresciDinosauro() {
		assertEquals("@no,NonEIlTuoTurno",s.deponiUovo(0,0)); //non e' il suo turno
		s.getUserDaToken(0).setDiturno(true);
		s.creaRazza(0, "prova", "c");
		s.getUserDaToken(0).getSpecieCorrente().getDino().removeAllElements();
		s.getUserDaToken(0).getSpecieCorrente().addDino(0, 1, 1);
		s.getUserDaToken(0).getSpecieCorrente().getDino(0).setDimensione(5);
		assertEquals("@no,DimensioneMassimaRaggiunta", s.cresciDinosauro(0, 0)); //Dinosauro gia' a dimensione massima
		s.getUserDaToken(0).getSpecieCorrente().getDino(0).setDimensione(4);
		assertEquals("@no,MorteDinosauroESpecieEstinta", s.cresciDinosauro(0, 0)); //Dinosauro non ha abbastanza energia
	}

	@Test
	public void testStatoDinosauro() {
		assertEquals("@no,NonHaiUnaSpecieNonEstinta",s.statoDinosauro(0,0)); //non ha una specie
		s.creaRazza(0, "prova", "c");
		s.getUserDaToken(0).getSpecieCorrente().getDino().removeAllElements();
		assertEquals("@no,IdNonValido", s.statoDinosauro(0, 0)); //non ha un dinosauro
	}

	@Test
	public void testVistaLocale() {
		assertEquals("@no,NonHaiUnaSpecieNonEstinta",s.vistaLocale(0,0)); //non ha una specie
		s.creaRazza(0, "prova", "c");
		s.getUserDaToken(0).getSpecieCorrente().getDino().removeAllElements();
		assertEquals("@no,IdNonValido", s.vistaLocale(0, 0)); //non ha un dinosauro
	}

	@Test
	public void testListaDino() {
		assertEquals("@no,TokenNonValido",s.listaDino(3)); //non esiste user 
		assertEquals("@no,NonHaiUnaSpecieNonEstinta",s.listaDino(0)); //non ha una specie
	}

	@Test
	public void testMappaGenerale() {
		assertEquals("@no,TokenNonValido",s.mappaGenerale(3)); //non esiste user 
		assertEquals("@no,DeviPrimaCreareUnaSpecie",s.mappaGenerale(0)); //non ha una specie
	}

	@Test
	public void testUscitaPartita() {
		assertEquals("@ok",s.uscitaPartita(0)); //valido
		assertEquals("@no,TokenNonValido",s.uscitaPartita(3)); //non esiste user
	}

	@Test
	public void testLogout() {
		assertEquals("@ok",s.logout(0)); //valido
		assertEquals("@no,TokenNonValido",s.logout(3)); //non esiste user
	}

	@Test
	public void testAccessoPartita() {
		assertEquals("@no,TokenNonValido",s.accessoPartita(3)); //non esiste user
		assertEquals("@no,DeviPrimaCreareUnaSpecie",s.accessoPartita(0)); //non ha una specie
		s.creaRazza(0, "prova", "c");
		assertEquals("@ok",s.accessoPartita(0)); //ok
	}

	@Test
	public void testCreaRazza() {
		assertEquals("@no,IdNonValido",s.creaRazza(3,"prova","c")); //non esiste user
		s.creaRazza(0, "prova", "c");
		assertEquals("@no,LaTuaSpecieNonSiEAncoraEstinta",s.creaRazza(0,"prova","c")); //La specie non e' ancora estinta
	}

	@Test
	public void testCreaGiocatore() {
		assertEquals("@no,UserGiaEsistente",s.creaGiocatore("User", "pas"));
		assertEquals("@ok",s.creaGiocatore("Utente","paaaas"));
		//xk la JUnit non aggiunge? Nel gioco funziona invece....
	}

	@Test
	public void testLogin() {
		assertEquals("@ok,"+s.getN_token(),s.login("User", "password"));
		assertEquals("@no,UtenteGiaLoggato",s.login("User", "password"));
		assertEquals("@no,UserOPasswordScorretti",s.login("NonEsiste", "password"));
	}

}
